﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Xml.Serialization;
using System.IO;
using System.Text;
using System.Xml;
using System.Globalization;
using ERPMVC.Models;

namespace FinanceiroServices
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Financeiro : System.Web.Services.WebService
    {

        public class employee
        {
            public int id;
            public string name;
            public float rendimento;
            public int account;

            public employee() { }
            public employee(int id, string name, float ren, int acc)
            {
                this.id = id;
                this.name = name;
                this.rendimento = ren;
                this.account = acc;
            }
        }



        private int count = 0;

        /// <summary>
        /// Essa função deserializa 
        /// </summary>
        /// <param name="xml"></param>
        [WebMethod]
        public int Pagamento()
        {
            ContasDBEntities _db = new ContasDBEntities();


            List<employee> empregados = new List<employee>();
            int funcionarios = 0;

            XmlDocument xml = new XmlDocument();
            
            xml.Load("http://rhlabsoft.heroku.com/employees.xml");


            //Verificando se nesse mes já foi pago
            var pago = (from m in _db.contasapagar

                        where m.vencimento.Month >= DateTime.Now.Month

                        select m);



            if (pago.ToList().Count == 0)
            {
                foreach (XmlNode item in xml.LastChild.ChildNodes)
                {
                    funcionarios++;
                    float TotalAmount = 0;
                    employee a = new employee();
                    foreach (XmlNode employ in item.ChildNodes)
                    {


                        if (employ.Name.Contains("name") && !employ.Name.Contains("role-name"))
                        {
                            a.name = employ.InnerText;
                        }
                        if (employ.Name.Contains("id"))
                        {
                            a.id = Int32.Parse(employ.InnerText, CultureInfo.InvariantCulture);
                        }
                        if (employ.Name.Contains("bank-account-number"))
                        {
                            a.account = Int32.Parse(employ.InnerText, CultureInfo.InvariantCulture);
                        }

                        // TotalAmount = 0;
                        if (employ.Name.Contains("salary"))
                        {
                            a.rendimento += float.Parse(employ.InnerText, CultureInfo.InvariantCulture);

                        }
                        if (employ.Name.Contains("benefits"))
                        {
                            foreach (XmlNode benefits in employ.ChildNodes)
                            {
                                foreach (XmlNode benefit in benefits)
                                {
                                    if (benefit.Name.Contains("value"))
                                    {
                                        a.rendimento += float.Parse(benefit.InnerText, CultureInfo.InvariantCulture);
                                    }
                                }

                            }
                        }


                    }
                    //a.rendimento = TotalAmount;
                    empregados.Add(a);

                    //Adicionando ao contas a pagar no pago
                    //ContaBancaria bb = new ContaBancaria();
                    //bb.Agencia = 1;
                    //bb.Banco = 1;
                    //bb.ContaCorrente = a.account;
                    //_db.AddToContaBancaria(bb);
                    //_db.SaveChanges();

                    contasapagar pagar = new contasapagar();

                    //pagar.ContaBancaria = bb;
                    pagar.descricao = "Salário referente ao mês " + DateTime.Now.Month.ToString();

                    pagar.titulo = (decimal)a.rendimento;
                    pagar.documento = "Salário";
                    pagar.favorecido = a.name;
                    pagar.juros = (double)(0);
                    pagar.multa = (decimal)(0);
                    pagar.Pago = true;
                    pagar.vencimento = DateTime.Now;

                    _db.AddTocontasapagar(pagar);
                    _db.SaveChanges();

                }
            }

            return funcionarios;

        }


        [WebMethod]
        public void Comprar(string nome, string fornecedor, string fantasia, DateTime entrega, string grupo, float preco)
        {


            ContasDBEntities _db = new ContasDBEntities();
            contasapagar pagar = new contasapagar();

            pagar.descricao = "Produto: " + nome + " Nome Fantasia:" + fantasia + " Fornecedor: " + fornecedor + " Grupo: " + grupo;
            pagar.titulo = (decimal)preco;
            pagar.documento = "Compra";
            pagar.favorecido = fornecedor;

            pagar.juros = (double)(0);
            pagar.multa = (decimal)(0);
            pagar.Pago = false;
            pagar.vencimento = entrega;

            _db.AddTocontasapagar(pagar);
            _db.SaveChanges();


        }

        

    }
}
